package com.oa.oaspccommon.util;


import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;

import java.util.Date;

/**
 * @author Sdx
 * 2021-04-19
 */
public class JwtUtil {
    final static String jwt_secret = "jwt_secret";
    final static long expire = 5 * 60 * 1000;

    //1.创建令牌
    public static String createToken(String userId) {
//      获取当前时间
        long currentPoint = System.currentTimeMillis();
//      生成过期时间点的日期对象
        Date expire_date = new Date(currentPoint + expire);
//      创建一个JWT构建对象
        JWTCreator.Builder builder = JWT.create();
//      给构建起添加载荷（用户id）
        builder.withAudience(userId);
//      设置令牌的过期截至时间点
        builder.withExpiresAt(expire_date);
//      生成算法对象，需要密钥
        Algorithm algorithm = Algorithm.HMAC256(jwt_secret);
//      生成签名后的令牌，需要算法定义作为参数
        String sign = builder.sign(algorithm);
        return sign;
    }

    //2.解析令牌获取用户信息
    public static String getUserInforFromToken(String token) {
        return null;

    }

    //3.校验令牌合法性
    public static boolean checkToken(String token) {
        try {//        生成算法对象
            Algorithm algorithm = Algorithm.HMAC256(jwt_secret);
//        创建jwt的校验器对象
            JWTVerifier jwtVerifier = JWT.require(algorithm).build();
//        校验令牌（解析）
            DecodedJWT decodedJWT = jwtVerifier.verify(token);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}
